﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Espam.Idiomas.Decimo.Tesis.Datos;
using System.Data.SqlClient;
using System.Data;


namespace Espam.Idiomas.Decimo.Tesis.Negocio
{
    public class Horarios:UbicacionModulos
    {
        public int idHorario  { get; set; }
        public string horario { get; set; }
        public int idHorariogrid { get; set; }
        public string horariogrid { get; set; }
        public string horaInicio { get; set; }
        public string horaFin { get; set; }
        public int idPeriodo { get; set; }
        //public int idEstado { get; set; }
        public int idDocente { get; set; }
        public int nivel { get; set; }
        public string equivalente { get; set; }
        public string fecha { get; set; }
        public TimeSpan horaInicio1 { get; set; }
        public TimeSpan horaFin1 { get; set; }
        public int ciclo { get; set; }
        public int idModulo { get; set; }


        //Modulos oModulos = new Modulos();
        //public List<Modulos> Modulosgrid
        //{  
        //    get
        //    {
        //        return oModulos.getModulosGuardadosPorHorario(this.idHorariogrid);
        //    }
        //}
    }
    

    public class ListadoHorarios : Horarios
    { 
        public List<Horarios> getHorarios()
        {
            BaseDatos oBase = new BaseDatos();
            List<Horarios> lista = new List<Horarios>();
            SqlDataReader reader;
            try
            {

                string consulta = string.Format("sp_getHorarios");
                SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("estado",idEstado);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    Horarios horario = new Horarios();
                    horario.idHorario = reader.GetInt32(0);
                    horario.horario = reader.GetString(1);
                    lista.Add(horario);
                }

                return lista;

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                oBase.CerrarConexion();
            }
        }

        public List<Horarios> getHorariosGirdview()
        {
            BaseDatos oBase = new BaseDatos();
            List<Horarios> lista = new List<Horarios>();
            SqlDataReader reader;
            try
            {

                string consulta = string.Format("sp_getHorariosgrid");
                SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    Horarios horario = new Horarios();
                    horario.idHorariogrid = reader.GetInt32(0);
                    horario.horariogrid = reader.GetString(1);
                    lista.Add(horario);
                }

                return lista;

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                oBase.CerrarConexion();
            }
        }
        public string SaveHorario()
        {
            BaseDatos oBase = new BaseDatos();
            string mensaje = "";
            SqlDataReader reader;
            try
            {
                string consulta = string.Format("sp_saveHorario");
                SqlCommand comando = new SqlCommand();
                comando.Connection = oBase.conexion;
                comando.CommandText = consulta;
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("idPeriodo", idPeriodo);
                comando.Parameters.AddWithValue("horaInicio", horaInicio);
                comando.Parameters.AddWithValue("horaFin", horaFin);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    mensaje = reader.GetString(0);
                }
                if (!reader.IsClosed)
                {
                    reader.Close();
                }
            }
            catch (Exception ex)
            {
                mensaje = ex.Message;
            }
            finally
            {
                oBase.CerrarConexion();
               
            }
            return mensaje;
        }
        public List<Horarios> getHorarioById()
        {
            BaseDatos oBase = new BaseDatos();
            List<Horarios> lista = new List<Horarios>();
            SqlDataReader reader;
            try
            {
                string consulta = string.Format("sp_getHorarioById");
                SqlCommand comando = new SqlCommand();
                comando.CommandText = consulta;
                comando.Connection = oBase.conexion;
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("idHorario",idHorario);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    Horarios oHorarios = new Horarios();
                    oHorarios.idHorario = reader.GetInt32(0);
                    oHorarios.horaInicio = reader.GetString(1);
                    oHorarios.horaFin = reader.GetString(2);
                    oHorarios.idPeriodo = reader.GetInt32(3);
                    lista.Add(oHorarios);
                }
                
            }
            catch (Exception)
            {

                
            }
            finally
            {
                oBase.CerrarConexion();
            }
            return lista;
        }
        /// <summary>
        /// Metodo para editar Horario
        /// </summary>
        /// <returns>mensaje de confirmacion correcto/error</returns>
        public string EditHorario()
        {
            BaseDatos oBase = new BaseDatos();
            string mensaje = "";
            SqlDataReader reader;
            try
            {
                string consulta = string.Format("sp_editHorario");
                SqlCommand comando = new SqlCommand(consulta,oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("idHorario", idHorario);
                comando.Parameters.AddWithValue("horaInicio", horaInicio);
                comando.Parameters.AddWithValue("horaFin", horaFin);
                comando.Parameters.AddWithValue("idPeriodoDia",idPeriodo);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    mensaje = reader.GetString(0);
                }

            }
            catch (Exception ex)
            {

                mensaje = ex.Message;
            }
            finally
            {
                oBase.CerrarConexion();
            }
            return mensaje;
        }
        /// <summary>
        /// Metodo para desvincular horario
        /// </summary>
        /// <returns>Mensaje de confirmacion correcto/error</returns>
        public string DeleteHorario()
        {
            string mensaje = "";
            BaseDatos  oBase = new BaseDatos();
            SqlDataReader reader;
            try
            {
                string consulta = string.Format("sp_deleteHorario");
                SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@idHorario", idHorario);
                comando.Parameters.AddWithValue("estado",idEstado);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    mensaje = reader.GetString(0);
                }
            }
            catch (Exception ex)
            {
                mensaje = ex.Message;
            }
            finally
            {
 
            }
            return mensaje;
        }

        public List<Horarios> getHorariosListabyDocente()
        {
            BaseDatos oBase = new BaseDatos();
            List<Horarios> lista = new List<Horarios>();
            SqlDataReader reader;
            try
            {

                string consulta = string.Format("sp_getHorariosListaEstudiantesByDocente");
                SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@idDocente", idDocente);
                comando.Parameters.AddWithValue("@nivel", nivel);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    Horarios horario = new Horarios();
                    horario.idHorario = reader.GetInt32(0);
                    horario.horario = reader.GetString(1);
                    horario.idModulo = reader.GetInt32(2);
                    lista.Add(horario);
                }

            }
            catch (Exception)
            {
            }
            finally
            {
                oBase.CerrarConexion();
            }
            return lista;
        }
        /// <summary>
        /// Metodo para obtener horarios de clases por docente
        /// </summary>
        /// <returns>lista de horarios</returns>
        public List<Horarios> GetHorariosByDocente()
        {
            List<Horarios> lista = new List<Horarios>();
            BaseDatos oBase = new BaseDatos();
            SqlDataReader reader;
            try
            {
                string consulta = string.Format("sp_getHorariosByDocente");
                SqlCommand comando = new SqlCommand();
                comando.CommandText = consulta;
                comando.Connection = oBase.conexion;
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("idDocente",idDocente);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while(reader.Read())
                {
                    Horarios oHora = new Horarios();
                    oHora.equivalente = reader.GetString(0);
                    oHora.horario = reader.GetString(1);
                    oHora.fecha = reader.GetString(2);
                    oHora.descripcionUbicacion = reader.GetString(3);
                    lista.Add(oHora);
                }
            }
            catch (Exception)
            {
                lista = null;
            }
            finally
            {
                oBase.CerrarConexion();
            }
            return lista;
        }

        public List<Horarios> GetHorariosReporte()
        {
             BaseDatos oBase = new BaseDatos();
             SqlDataReader reader;
            List<Horarios> lista = new List<Horarios>();
            try
            {
                string consulta = string.Format("sp_getHorariosByNivelReport");
               SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
               comando.CommandType = CommandType.StoredProcedure;
               comando.Parameters.AddWithValue("@nivel", nivel);
               comando.Parameters.AddWithValue("@ciclo",ciclo );
               oBase.Conectar();
               reader = comando.ExecuteReader();
               while (reader.Read())
               {
                   Modulos oM = new Modulos();
                   oM.idHorario = reader.GetInt32(0);
                   oM.horario = reader.GetString(1);
                   oM.idModulo = reader.GetInt32(2);
                   lista.Add(oM);
               }
            }
            catch (Exception)
            {
                
                throw;
            }
            return lista;
        }

    }
}
